package net.esj.tree.service;

import java.io.Serializable;
import java.util.List;

import net.esj.basic.service.DefaultService;
import net.esj.basic.utils.Pagination;
import net.esj.tree.utils.TreeEntity;

public interface TreeService<T> extends DefaultService {
	
	Long DEFAULT_TREE_ROOT_ID_LONG = 0L;
	
	/**
	 * 获得整棵树（包含所有子节点）
	 * @param needRoot
	 * @return
	 */
	 List<TreeEntity> getWholeTree(boolean needRoot);

	 /**
	  * 根据parentId获得该所有子节点
	  * @param parentId 
	  * @param hasChild 是否包含子节点的子节点
	  * @return
	  */
	 List<TreeEntity> getChildren(Serializable parentId,boolean hasChild);
	 
	 Pagination<TreeEntity> getChildrenPage(Serializable parentId,Pagination page);
	 
	 TreeEntity getEntity(Serializable id);
	 
	 Class<?> getGeneralClass();
	 
	 /**
	  * 该树的最大层级 不能大于7层
	  * @return
	  */
	 Integer getMaxStorey();
}
